#include<stdio.h>

/*
 * 最终测试结构如下：
 * 函数中有结构体参数时，在进行函数名修饰时，结构体修饰为 结构体名长度+结构体名
 * 比如下文中的 _Z10testStructAi1A、_Z10testStructBi1B、_Z10testStructCi1C
 * 函数重载同样适用于结构体参数
 */

//测试结果为 _Z10testStructi1A
struct A
{
  int a;
  char c;
  double b;
};

//再次测试结构体B，是否为 1B？
struct B
{
  char c;
};

//顺便测试一下结构 C 是否为 1C
struct C
{
  char c;
};

void testStructA(int n, struct A a = {999, 'a', 6.66})
{
  printf("%d\n", n);
  printf("%c\n", a.c);
}

void testStructB(int n, struct B b = {'b'})
{
  printf("%d\n", n);
  printf("%c\n", b.c);
}

void testStructC(int n, struct C c = {'c'})
{
  printf("%d\n", n);
  printf("%c\n", c.c);
}

//测试结构体传参时，函数重载名是什么样的
int main()
{
  struct A a = {100, 'A', 3.14};
  struct B b = {'B'};
  struct C c = {'C'};

  int n = 10;

  testStructA(n, a);
  testStructB(n, b);
  testStructC(n, c);
  return 0;
}
